home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / lib / python2.6 / dist-packages / checkbox / variables.pyc (.txt) < prev   
Encoding:
Python Compiled Bytecode  |  2009-10-12  |  5.8 KB  |  146 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. import re
  5. import posixpath
  6.  
  7. def VariableFactory(cls, **old_kwargs):
  8.     
  9.     def variable_factory(**new_kwargs):
  10.         kwargs = old_kwargs.copy()
  11.         kwargs.update(new_kwargs)
  12.         return cls(**kwargs)
  13.  
  14.     return variable_factory
  15.  
  16.  
  17. try:
  18.     from functools import partial as VariableFactory
  19. except ImportError:
  20.     pass
  21.  
  22.  
  23. class Variable(object):
  24.     _value = None
  25.     _required = True
  26.     attribute = None
  27.     
  28.     def __init__(self, attribute = None, value = None, value_factory = None, required = True):
  29.         self.attribute = attribute
  30.         self._required = required
  31.         if value is not None:
  32.             self.set(value)
  33.         
  34.         if value_factory is not None:
  35.             self.set(value_factory())
  36.         
  37.  
  38.     
  39.     def get(self, default = None):
  40.         value = self._value
  41.         if value is None:
  42.             return default
  43.         return self.parse_get(value)
  44.  
  45.     
  46.     def set(self, value):
  47.         if value is None:
  48.             if self._required is True:
  49.                 raise Exception, "None isn't an acceptable value"
  50.             self._required is True
  51.             new_value = None
  52.         else:
  53.             new_value = self.parse_set(value)
  54.         self._value = new_value
  55.  
  56.     
  57.     def parse_get(self, value):
  58.         return value
  59.  
  60.     
  61.     def parse_set(self, value):
  62.         return str(value)
  63.  
  64.  
  65.  
  66. class BoolVariable(Variable):
  67.     
  68.     def parse_get(self, value):
  69.         if re.match('(yes|true)', value, re.IGNORECASE):
  70.             return True
  71.         if re.match('(no|false)', value, re.IGNORECASE):
  72.             return False
  73.         return bool(int(value))
  74.  
  75.  
  76.  
  77. class StringVariable(Variable):
  78.     
  79.     def parse_get(self, value):
  80.         return str(value)
  81.  
  82.  
  83.  
  84. class PathVariable(StringVariable):
  85.     
  86.     def parse_get(self, value):
  87.         path = super(PathVariable, self).parse_get(value)
  88.         return posixpath.expanduser(path)
  89.  
  90.  
  91.  
  92. class IntVariable(Variable):
  93.     
  94.     def parse_get(self, value):
  95.         return int(value)
  96.  
  97.  
  98.  
  99. class FloatVariable(Variable):
  100.     
  101.     def parse_get(self, value):
  102.         return float(value)
  103.  
  104.  
  105.  
  106. class ListVariable(Variable):
  107.     
  108.     def __init__(self, item_factory, *args, **kwargs):
  109.         super(ListVariable, self).__init__(*args, **kwargs)
  110.         self._item_factory = item_factory
  111.  
  112.     
  113.     def parse_get(self, value):
  114.         item_factory = self._item_factory
  115.         if not len(value):
  116.             values = []
  117.         else:
  118.             values = re.split('\\s*,?\\s+', value)
  119.         return [ item_factory(value = v).get() for v in values ]
  120.  
  121.     
  122.     def parse_set(self, value):
  123.         if isinstance(value, list):
  124.             return ', '.join(value)
  125.         return value
  126.  
  127.  
  128.  
  129. def get_variable(obj, attribute):
  130.     return get_variables(obj)[attribute]
  131.  
  132.  
  133. def get_variables(obj):
  134.     get_attributes = get_attributes
  135.     import checkbox.attribute
  136.     if '__checkbox_variables__' in obj.__dict__:
  137.         return obj.__dict__['__checkbox_variables__']
  138.     variables = { }
  139.     cls = type(obj)
  140.     for attribute in get_attributes(cls).itervalues():
  141.         variable = attribute.variable_factory(attribute = attribute)
  142.         variables[attribute] = variable
  143.     
  144.     return obj.__dict__.setdefault('__checkbox_variables__', variables)
  145.  
  146.